import vnode from "./vnode"

/*
 * 接收3个参数
 * 低配版功能
 * 形态一：h('div', {}, '文字')
 * 形态二：h('div', {}, [])
 * 形态三：h('div', {}, h())
 * */
export default function(sel, data, c) {
    // 检查参数的个数
    if (arguments.length < 3) {
        throw new Error('请传3个参数')
    }
    // 检查c的类型
    if (typeof c === 'string' || typeof c === 'number') {
        // 说明现在调用h函数形态1
        return vnode(sel, data, undefined, c, undefined)
    } else if (Array.isArray(c)) {
        let children = []
            // 说明现在调用h函数形态2
        for (let i = 0; i < c.length; i++) {
            // 检查c[i]必须是一个对象，如果不满足
            if (!typeof c[i] === 'object' && c[i].hasOwnProperty('sel')) {
                throw new Error('请传入正确的格式')
            }
            children.push(c[i])
        }
        return vnode(sel, data, children, undefined, undefined)
    } else if (typeof c === 'object' && c.hasOwnProperty('sel')) {
        // 说明现在调用形态3
        let children = [c]
        return vnode(sel, data, children, undefined, undefined)
    } else {
        throw new Error('传入的第3个参数类型不对')
    }
}